import java.util.*;

/**
 * 数组元素反转
 */
public class Demo10 {
    public static void main(String[] args) {
        //1. 定义int类型的数组, 存储数据:  11, 22, 33, 44, 55
        int[] arr = {11, 22, 33, 44, 55, 66};
        //调用数组元素反转的方法
        System.out.println(printArr(reverse(arr, 0, arr.length - 1)));


    }

    /**
     * 数组元素反转
     *
     * @param arr
     */
    public static void reverse(int[] arr) {
        if (arr == null)
            return;
        for (int i = 0; i < arr.length >> 1; i++) {
            swap(arr, i, arr.length - 1 - i);
        }
        System.out.println(printArr(arr));
    }

    public static int[] reverse(int[] arr, int low, int high) {
        if (arr == null)
            return null;
        if (low >= high)
            return arr;
        swap(arr, low, high);
        reverse(arr, low + 1, high - 1);
        return arr;
    }

    /**
     * 交换数组中的2个数组元素的值
     *
     * @param arr 要被交换的数组
     * @param i   要被交换的数组中的第一个数组元素的索引.
     * @param j   要被交换的数组中的第二个数组元素的索引.
     */
    private static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    /**
     * 返回数组的字符串
     *
     * @param a int类型的数组
     * @return [1, 2, 2]返回类似这种格式数组的字符串
     */
    public static String printArr(int[] a) {
        if (a == null)
            return "null";
        int iMax = a.length - 1;
        if (iMax == -1)
            return "[]";
        String b = "[";
        for (int i = 0; ; i++) {
            b += a[i];
            if (i == iMax)
                return b + "]";
            b += ",";
        }
    }

    public static void printArr2(int[] a) {
        if (a == null)
            return;
        String b = "";
        int iMax = a.length - 1;
        if (iMax == -1)
            b = "[]";
        b = "[";
        for (int i = 0; ; i++) {
            b += a[i];
            if (i == iMax) {
                b += "]";
                break;
            }
            b += ",";
        }
        System.out.println(b);
    }
}